package com.star.star.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.star.core.base.BaseController;
import com.star.security.annotations.Authorize;
import com.star.star.dto.*;
import com.star.star.service.*;
import com.star.star.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * 艺人作品
 *
 * @author yangzj
 */
@RestController
@RequestMapping("/star-art")
public class StarArtController extends BaseController {

    @Autowired
    private StarArtService starArtService;
    @Autowired
    private StarArtLikeService starArtLikeService;
    @Autowired
    private StarArtCollectService starArtCollectService;
    @Autowired
    private StarArtEmpowerService starArtEmpowerService;
    @Autowired
    private StarArtLogService starArtLogService;

    /**
     * 分页
     *
     * @param dto 入参
     * @return {@link IPage}<{@link StarArtPageVO}>
     */
    @Authorize("star:art")
    @PostMapping("/page")
    public IPage<StarArtPageVO> page(@Validated @RequestBody StarArtPageDTO dto){
        return starArtService.page(dto);
    }

    /**
     * 更新发布
     *
     * @param id        ID
     * @param isPublish 是否发布
     */
    @Authorize("star:publish")
    @PutMapping("/publish/{id}/{isPublish}")
    public void updatePublish(@PathVariable("id") Long id, @PathVariable("isPublish") Boolean isPublish) {
        starArtService.updatePublish(id, isPublish);
    }

    /**
     * 授权
     *
     * @param dto 入参
     */
    @Authorize("star:art:empower")
    @PutMapping("/empower")
    public void saveOrUpdate(@Validated @RequestBody StarArtEmpowerSaveOrUpdateDTO dto){
        starArtEmpowerService.saveOrUpdate(dto);
    }

    /**
     * 授权详情
     *
     * @param artId 作品ID
     * @return {@link StarArtEmpowerDetailVO}
     */
    @Authorize("star:art:empower")
    @GetMapping("/empower/detail/{artId}")
    public StarArtEmpowerDetailVO getDetail(@PathVariable("artId") Long artId) {
        return starArtEmpowerService.getDetail(artId);
    }

    /**
     * 变更日志分页
     *
     * @param dto 入参
     * @return {@link IPage}<{@link StarArtLogPageVO}>
     */
    @Authorize("star:art")
    @PostMapping("/log/page")
    public IPage<StarArtLogPageVO> page(@Validated @RequestBody StarArtLogPageDTO dto){
        return starArtLogService.page(dto);
    }

    //-------------------- 以下微信小程序（用户端）接口 --------------------

    /**
     * 保存-微信小程序（用户端）
     *
     * @param dto 入参
     */
    @Authorize("wxuser")
    @PostMapping("/wxuser")
    public void saveWxuser(@Validated @RequestBody StarArtSaveWxuserDTO dto) {
        starArtService.saveWxuser(dto, getUserId());
    }

    /**
     * 更新-微信小程序（用户端）
     *
     * @param dto 入参
     */
    @Authorize("wxuser")
    @PutMapping("/wxuser")
    public void updateWxuser(@Validated @RequestBody StarArtUpdateWxuserDTO dto) {
        starArtService.updateWxuser(dto, getUserId());
    }

    /**
     * 删除通过ID-微信小程序（用户端）
     *
     * @param id ID
     */
    @Authorize("wxuser")
    @DeleteMapping("/wxuser/{id}")
    public void deleteByIdWxuser(@PathVariable("id") Long id) {
        starArtService.deleteByIdWxuser(id, getUserId());
    }

    /**
     * 获取详情-微信小程序（用户端）
     *
     * @param id ID
     * @return {@link StarArtDetailWxuserVO}
     */
    @Authorize("wxuser")
    @GetMapping("/wxuser/{id}")
    public StarArtDetailWxuserVO getDetailWxuser(@PathVariable("id") Long id) {
        return starArtService.getDetailWxuser(id, getUserId());
    }

    /**
     * 分页相关统计-微信小程序（用户端）
     *
     * @return {@link IPage}<{@link StarArtPageWxuserVO}>
     */
    @Authorize("wxuser")
    @GetMapping("/wxuser/count-page")
    public StarArtCountWxuserVO countWxuser() {
        return starArtService.countWxuser(getUserId());
    }

    /**
     * 分页-微信小程序（用户端）
     *
     * @param dto 入参
     * @return {@link IPage}<{@link StarArtPageWxuserVO}>
     */
    @Authorize("wxuser")
    @PostMapping("/wxuser/page")
    public IPage<StarArtPageWxuserVO> pageWxuser(@RequestBody StarArtPageWxuserDTO dto) {
        return starArtService.pageWxuser(dto.setUserId(getUserId()));
    }

    /**
     * 点赞-微信小程序（用户端）
     *
     * @param id   ID
     * @param like true=点赞 false=取消点赞
     */
    @Authorize("wxuser")
    @PostMapping("/wxuser/like/{id}/{like}")
    public void likeOrCancel(@PathVariable("id") Long id, @PathVariable("like") boolean like) {
        starArtLikeService.saveOrDelete(id, like, getUserId());
    }

    /**
     * 收藏-微信小程序（用户端）
     *
     * @param id      ID
     * @param collect true=收藏 false=取消收藏
     */
    @Authorize("wxuser")
    @PostMapping("/wxuser/collect/{id}/{collect}")
    public void collectOrCancel(@PathVariable("id") Long id, @PathVariable("collect") boolean collect) {
        starArtCollectService.saveOrDelete(id, collect, getUserId());
    }

    /**
     * 作品播放+1-微信小程序（用户端）
     *
     * @param id ID
     */
    @Authorize("wxuser")
    @PostMapping("/wxuser/play-count/{id}")
    public void playCount(@PathVariable("id") Long id) {
        starArtService.playCount(id, getUserId());
    }

}
